﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CoVanHocTapData.Concretes;
using CoVanHocTapData.Entities;
using CoVanHocTapProject.Infrastructure;
using CoVanHocTapData.Interface;

namespace CoVanHocTapProject.Controllers
{
    public class ChuongTrinhDaoTaoChuanController : Controller
    {
        //
        // GET: /ChuongTrinhDaoTaoChuan/

        #region repos
        ILopRepository lopRepos = new LopRepository();
        INganhRepository nganhRepos = new NganhDaoTaoRepository();
        IMonHocRepository monHocRepos = new MonHocRepository();
        IChuongTrinhDaoTaoRepository ctdtRepos = new ChuongTrinhDaoTaoRepository();
        IChiTietKhoiCTDTRepository ctKhoiCTDTRepos = new ChiTietKhoiCTDTRepository();
        IKhoiChuongTrinhDaoTaoRepository khoiCTDTRepos = new KhoiChuongTrinhDaoTaoRepository();
        IKetQuaHocRepository ketquahoctapRepos = new KetQuaHocRepository();
        #endregion


        public ActionResult Index()
        {

            if (Publics.sinhVienDangNhap == null)
            {
                return View();
            }

            string nganhID = nganhRepos.LayMaNganh(Publics.sinhVienDangNhap.LopID);
            //var nganhDaoTao = nganhRepos.LayNganhDaoTaoTheoNganh(nganhID);

            var ctdtList = ctdtRepos.LayChuongTrinhDaoTaoChuan(nganhID, Publics.sinhVienDangNhap.Lop.NienKhoaID.Value, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);

            List<MonHocTheoHocKy> monHocList = new List<MonHocTheoHocKy>();
            foreach (var ctdtItem in ctdtList)
            {
                if (!ctdtItem.TuChon.Value || ctdtItem.TuChon == null)
                    monHocList.Add(monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID, ctdtItem.HocKy, nganhID));
            }

            //hien thi mh trog khoi tu chon
            List<string> tenKhoiCTDT = new List<string>();
            IQueryable<KhoiChuongTrinhDaoTao> khoiCTDT = khoiCTDTRepos.LayKhoiCTDT(nganhID, Publics.sinhVienDangNhap.Lop.NienKhoaID.Value, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);
            foreach (var khoiItem in khoiCTDT)
            {
                string hocKy;
                //if (khoiItem.HocKys == null)
                //    hocKy = 0;
                //else
                //    hocKy = khoiItem.HocKy.Value;
                var ctKhoiCTDT = ctKhoiCTDTRepos.layChiTietKhoiCTDT(nganhID, khoiItem.ID, khoiItem.HocKys);



                foreach (var chiTietItem in ctKhoiCTDT)
                {

                    if (tenKhoiCTDT.IndexOf(chiTietItem.TenKhoiMonTuChon) == -1)
                        tenKhoiCTDT.Add(chiTietItem.TenKhoiMonTuChon);

                    monHocList.Add(chiTietItem);
                }
            }

            foreach (var monHocItem in monHocList)
            {
                monHocItem.TenKhoiMonTuChonList = tenKhoiCTDT;
            }

            return View(monHocList);

        }

        public ActionResult LoTrinhHocTapChiTiet()
        {
            if (Publics.sinhVienDangNhap == null)
            {
                return View();
            }
            return View();
        }


        public JsonResult LoTrinhHocTapChiTietUC()
        {

            string nganhID = nganhRepos.LayMaNganh(Publics.sinhVienDangNhap.LopID);
            //var nganhDaoTao = nganhRepos.LayNganhDaoTaoTheoNganh(nganhID);

            var ctdtList = ctdtRepos.LayChuongTrinhDaoTao(nganhID, 0, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);

            List<MonHocTheoHocKy> monHocList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocBatBuocList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocTuChonList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocTuChonTree = new List<MonHocTheoHocKy>();

            int tongTCDatBatBuoc = 0;
            int tongTCDatTuChon = 0, tongTCTuChon = 0;

            //mh bat buoc



            for (int hocky = 1; hocky < 9; hocky++)
            {
                float tongTCDatTheoHocKy = 0; //tin chi dat
                float tongTCTheoHocKy = 0; //tong tin chi hoc ky
                foreach (var ctdtItem in ctdtList)
                {
                    if (!ctdtItem.TuChon.Value && int.Parse(ctdtItem.HocKy) == hocky)
                    {
                        MonHocTheoHocKy mHocItem = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID, ctdtItem.HocKy, nganhID);
                        var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(ctdtItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                        KetQuaHoc ketQuaHTSV = new KetQuaHoc();
                        if (kqhtList.Count() > 0)
                        {
                            if (kqhtList.Count() > 1)
                            {
                                ketQuaHTSV = ketquahoctapRepos.LayKetQuaCaoNhat(kqhtList.ToList());
                            }
                            else
                                ketQuaHTSV = kqhtList.FirstOrDefault();
                            if (ketQuaHTSV.DTB != null)
                            {
                                if (ketQuaHTSV.DTB.Value >= 5)
                                {
                                    tongTCDatBatBuoc += int.Parse(ketQuaHTSV.MonHoc.SoDVHocTap.Value.ToString());
                                    mHocItem.CoKQHT = true;
                                    mHocItem.DTB = ketQuaHTSV.DTB.Value;
                                    mHocItem.DVHT = ketQuaHTSV.MonHoc.SoDVHocTap.Value;
                                    tongTCDatTheoHocKy += mHocItem.DVHT;
                                }
                            }
                            else
                                mHocItem.CoKQHT = false;
                        }
                        monHocBatBuocList.Add(mHocItem);
                        tongTCTheoHocKy += mHocItem.DVHT;
                    }
                }
                if (hocky == 1)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy1 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy1 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 2)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy2 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy2 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 3)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy3 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy3 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 4)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy4 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy4 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 5)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy5 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy5 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 6)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy6 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy6 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 7)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy7 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy7 = tongTCTheoHocKy;
                        break;
                    }
                }
                else if (hocky == 8)
                {
                    foreach (var item in monHocBatBuocList)
                    {
                        item.TongTCDatTheoHocKy8 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy8 = tongTCTheoHocKy;
                        break;
                    }
                }
            }
            //hien thi mh trog khoi tu chon
            List<string> tenKhoiCTDT = new List<string>();
            IQueryable<KhoiChuongTrinhDaoTao> khoiCTDT = khoiCTDTRepos.LayKhoiCTDT(nganhID, 2008, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);

            MonHocTheoHocKy thongtinData = new MonHocTheoHocKy(); //thong tin de tooltip      

            foreach (var khoiItem in khoiCTDT)
            {
                tongTCDatTuChon = 0;
                int hocKy;
                //if (khoiItem.HocKy == null)
                //    hocKy = 0;
                //else
                //    hocKy = khoiItem.HocKy.Value;
                var ctKhoiCTDT = ctKhoiCTDTRepos.layChiTietKhoiCTDT(nganhID, khoiItem.ID, khoiItem.HocKys);

                string tenKhoi = "";
                monHocTuChonList = new List<MonHocTheoHocKy>();
                //List<int> tongTCKhoiTuChon =new List<int>(); //ds so tc sv dat tuong ung hoi tu chon
                foreach (var chiTietItem in ctKhoiCTDT)
                {
                    //if (tenKhoiCTDT.IndexOf(chiTietItem.TenKhoiMonTuChon) == -1)
                    //    tenKhoiCTDT.Add(chiTietItem.TenKhoiMonTuChon);

                    tenKhoi = khoiItem.TenKhoiMonHoc;

                    var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(chiTietItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                    float soDVHTTheoMHoc = 0; //hien thi so tin chi
                    bool flag = false; //ghi dau dtb mh cua sv > 5 : true
                    foreach (var kqItem in kqhtList)
                    {
                        if (kqItem.DTB != null && kqItem.DTB.Value >= 5)
                        {
                            flag = true;
                            tongTCDatTuChon += int.Parse(kqItem.MonHoc.SoDVHocTap.Value.ToString());

                            break;
                        }
                    }
                    soDVHTTheoMHoc = monHocRepos.LayMonHocTheoMaMH(chiTietItem.MonHocID).SoDVHocTap.Value;
                    MonHocTheoHocKy tuChonTreeChildren = new MonHocTheoHocKy();
                    if (flag)
                    {
                        tuChonTreeChildren = new MonHocTheoHocKy()
                        {

                            TenKhoiMonTuChon = tenKhoi,
                            id = "tuchon" + chiTietItem.MonHocID,
                            name = "<p style='background-color: #4CC417'>" + chiTietItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + chiTietItem.TenMonHoc + "</p></p>",
                            data = new object(),
                            children = null
                        };
                    }
                    else
                    {
                        tuChonTreeChildren = new MonHocTheoHocKy()
                        {

                            TenKhoiMonTuChon = tenKhoi,
                            id = "tuchon" + chiTietItem.MonHocID,
                            name = chiTietItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px'>" + chiTietItem.TenMonHoc + "</p>",
                            data = new object(),
                            children = null
                        };
                    }

                    tongTCTuChon += int.Parse(monHocRepos.LayMonHocTheoMaMH(chiTietItem.MonHocID).SoDVHocTap.Value.ToString());
                    monHocTuChonList.Add(tuChonTreeChildren);
                }

                thongtinData = new MonHocTheoHocKy()
                {
                    id = "khoituchondata",
                    name = "Sinh viên đạt " + tongTCDatTuChon + "/" + tongTCTuChon + " tín chỉ",
                    children = null,
                    data = null
                };

                MonHocTheoHocKy khoiTuChonTree = new MonHocTheoHocKy()
                {
                    id = "khoituchon" + khoiItem.ID,
                    name = tenKhoi,
                    data = thongtinData,
                    children = monHocTuChonList.ToArray()
                };
                monHocTuChonTree.Add(khoiTuChonTree);
            }


            int i = 1;
            MonHocTheoHocKy mainTree;
            MonHocTheoHocKy tempTree;
            List<MonHocTheoHocKy> treeChildren = new List<MonHocTheoHocKy>(); //cay chung cac hk
            List<MonHocTheoHocKy> treeChildrenHK1 = new List<MonHocTheoHocKy>(); //hk1
            List<MonHocTheoHocKy> treeChildrenHK2 = new List<MonHocTheoHocKy>(); //hk2
            List<MonHocTheoHocKy> treeChildrenHK3 = new List<MonHocTheoHocKy>(); //hk3
            List<MonHocTheoHocKy> treeChildrenHK4 = new List<MonHocTheoHocKy>(); //hk4
            List<MonHocTheoHocKy> treeChildrenHK5 = new List<MonHocTheoHocKy>(); //hk5
            List<MonHocTheoHocKy> treeChildrenHK6 = new List<MonHocTheoHocKy>(); //hk6
            List<MonHocTheoHocKy> treeChildrenHK7 = new List<MonHocTheoHocKy>(); //hk7
            List<MonHocTheoHocKy> treeChildrenHK8 = new List<MonHocTheoHocKy>(); //hk8

            MonHocTheoHocKy batbuocMHDauData = new MonHocTheoHocKy();



            foreach (var item in monHocBatBuocList)
            {
                tempTree = item;
                tempTree.id = "bb" + i.ToString();
                if (item.CoKQHT && item.DTB >= 5)
                {
                    batbuocMHDauData = new MonHocTheoHocKy()
                    {
                        id = "dauMH",
                        name = "Đậu môn học",
                        children = null
                    };
                    tempTree.data = batbuocMHDauData;
                    tempTree.name = "<p style='background-color: #4CC417'>" + item.MonHocID + " - " + item.DVHT + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + item.TenMonHoc + "</p></p>";
                }
                else
                {
                    batbuocMHDauData = new MonHocTheoHocKy()
                    {
                        id = "kdauMH",
                        name = "Môn học này cần phải đạt!",
                        children = null
                    };
                    tempTree.name = item.MonHocID + " - " + item.DVHT + "<p style='font-size:10px'>" + item.TenMonHoc + "</p>";
                    tempTree.data = batbuocMHDauData;
                }
                tempTree.children = null;
                int tempInt;
                if (int.TryParse(item.HocKy, out tempInt))
                {
                    if (tempInt == 1)
                    {
                        treeChildrenHK1.Add(tempTree);
                    }
                    else if (tempInt == 2)
                        treeChildrenHK2.Add(tempTree);
                    else if (tempInt == 3)
                        treeChildrenHK3.Add(tempTree);
                    else if (tempInt == 4)
                        treeChildrenHK4.Add(tempTree);
                    else if (tempInt == 5)
                        treeChildrenHK5.Add(tempTree);
                    else if (tempInt == 6)
                        treeChildrenHK6.Add(tempTree);
                    else if (tempInt == 7)
                        treeChildrenHK7.Add(tempTree);
                    else if (tempInt == 8)
                        treeChildrenHK8.Add(tempTree);
                    i++;
                }




            }

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy1 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy1 + " tín chỉ",
                children = null,
                data = null
            };

            MonHocTheoHocKy hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk1",
                name = "<br/><b>" + "Học kỳ 1</b>",
                data = thongtinData,
                children = treeChildrenHK1.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy2 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy2 + " tín chỉ",
                children = null,
                data = null
            };

            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk2",
                name = "<br/><b>" + "Học kỳ 2</b>",
                data = thongtinData,
                children = treeChildrenHK2.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy3 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy3 + " tín chỉ",
                children = null,
                data = null
            };
            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk3",
                name = "<br/><b>" + "Học kỳ 3</b>",
                data = thongtinData,
                children = treeChildrenHK3.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy4 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy4 + " tín chỉ",
                children = null,
                data = null
            };
            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk4",
                name = "<br/><b>" + "Học kỳ 4</b>",
                data = thongtinData,
                children = treeChildrenHK4.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy5 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy5 + " tín chỉ",
                children = null,
                data = null
            };
            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk5",
                name = "<br/><b>" + "Học kỳ 5</b>",
                data = thongtinData,
                children = treeChildrenHK5.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy6 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy6 + " tín chỉ",
                children = null,
                data = null
            };
            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk6",
                name = "<br/><b>" + "Học kỳ 6</b>",
                data = thongtinData,
                children = treeChildrenHK6.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy7 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy7 + " tín chỉ",
                children = null,
                data = null
            };
            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk7",
                name = "<br/><b>" + "Học kỳ 7</b>",
                data = thongtinData,
                children = treeChildrenHK7.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhockydata",
                name = "Sinh viên đạt " + monHocBatBuocList.FirstOrDefault().TongTCDatTheoHocKy8 + "/" + monHocBatBuocList.FirstOrDefault().TongTCTheoHocKy8 + " tín chỉ",
                children = null,
                data = null
            };
            hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk8",
                name = "<br/><b>" + "Học kỳ 8</b>",
                data = thongtinData,
                children = treeChildrenHK8.ToArray()
            };
            treeChildren.Add(hk1Tree);

            thongtinData = new MonHocTheoHocKy()
            {
                id = "batbuoctreedata",
                name = "Sinh viên phải hoàn thành các môn bắt buộc quy định",
                children = null,
                data = null
            };

            MonHocTheoHocKy batbuocTree = new MonHocTheoHocKy()
            {
                id = "batbuocTree",
                name = "<br/>Môn học bắt buộc",
                data = thongtinData,
                children = treeChildren.ToArray()
            };

            thongtinData = new MonHocTheoHocKy()
            {
                id = "batbuoctreedata",
                name = "Sinh viên phải hoàn thành tối thiểu số tín chỉ theo từng phần tự chọn theo quy định",
                children = null,
                data = null
            };

            MonHocTheoHocKy tuchonTree = new MonHocTheoHocKy()
            {
                id = "tuchonTree",
                name = "<br/>Môn học tự chọn",
                data = thongtinData,
                children = monHocTuChonTree.ToArray()
            };

            treeChildren = new List<MonHocTheoHocKy>();

            treeChildren.Add(batbuocTree);
            treeChildren.Add(tuchonTree);

            string gioitinh = Publics.sinhVienDangNhap.Phai.Value == true ? "Nữ" : "Nam";

            //string lopID = Publics.sinhVienDangNhap.LopID;


            thongtinData = new MonHocTheoHocKy()
            {
                id = "lop",
                name = "Lớp: " + Publics.sinhVienDangNhap.LopID + "<br/>Giới tính: " +
                gioitinh + "<br/>Ngày sinh: " + Publics.sinhVienDangNhap.NgaySinh.Value.ToShortDateString()
                + "<br/>Lần đăng nhập cuối: " + Publics.sinhVienDangNhap.LanDangNhapGanNhat.Value.ToShortDateString(),
                children = null,
                data = null
            };


            mainTree = new MonHocTheoHocKy()
            {
                id = "root",
                name = "<b>" + Publics.sinhVienDangNhap.MSSV + " - " + Publics.sinhVienDangNhap.HoLot + " " + Publics.sinhVienDangNhap.Ten + "</b>",
                //+ "<hr/><br/>" + "Giới tính: " + gioitinh + "<br/>" + Publics.sinhVienDangNhap.NgaySinh.Value.ToShortDateString()
                //+ "<br/>" + Publics.sinhVienDangNhap.LanDangNhapGanNhat.Value.ToShortDateString(),

                //thongtin = "Lớp: " + lopID, //new List<string>() { gioitinh, Publics.sinhVienDangNhap.LopID, Publics.sinhVienDangNhap.NgaySinh.Value.ToShortDateString(), Publics.sinhVienDangNhap.LanDangNhapGanNhat.Value.ToShortDateString() },
                data = thongtinData,
                children = treeChildren.ToArray()
            };


            return Json(mainTree, JsonRequestBehavior.AllowGet);
        }
    }
}
